/*
 * ContenedorRegistroTabla.java	
 *
 * Copyright 2008 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Creado el 07/10/08, 12:30:38 AM
 */
package com.ufps.cuatro.modelo.asistente;


import javax.swing.JOptionPane;

import com.ufps.cuatro.modelo.representacion.componente.Componente;
import com.ufps.cuatro.util.Utileria;

/**
 * <i><b>ObjetoReflexion:</b></i> <p>Esta Clase Utilitaria permite almacenar un objeto
 * Compuesto en lagunas tablas con el fin de brindar soporte en los render especificos
 * implementados en la aplicación. Esta clase envuelve objetos con el fin de
 * obtener acceso a alguna propiedad interna de su contenido y asi utilizarla
 * para visualizar ó informa algun valor como mensaje visual o de ayuda.</p>
 *
 * @param <T> Referencia al <code>Componente</code> utilizado.
 * @author  Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 07/10/08
 */
public class ContenedorRegistroTabla<T extends Componente> {
    
    private T objComponente;    
    private String strNombreFila;
    private int fila;
    private Object objValue;
    private boolean editable;

    /**
     * Constructor por defecto que inicializa las propiedades.
     * @param objComponente Referencia al <code>Componente</code> utilizado.
     * @param strNombreFila Nombre de la Fila en un <code>JTable</code>.
     * @param fila Número de la fila en un <code>JTable</code>.
     * @param objValue Valor contenido en la celda.
     * @param editable Estado de edición en la celda.
     */
    public ContenedorRegistroTabla(T objComponente, String strNombreFila, int fila, Object objValue, boolean editable) {
        this.objComponente = objComponente;
        this.strNombreFila = strNombreFila;
        this.fila = fila;
        this.objValue = objValue;
        this.editable = editable;
    }
    public ContenedorRegistroTabla() {
        
    }

    /**
     * Devuelve el Estado de edición en la celda.
     * @return Estado de edición en la celda.
     */
    public boolean isEditable() {
        return editable;
    }

    /**
     * Establece el Estado de edición en la celda.
     * @param editable Estado de edición en la celda.
     */
    public void setEditable(boolean editable) {
        this.editable = editable;
    }

    /**
     * Devuelve el Número de la fila en un <code>JTable</code>.
     * @return Número de la fila en un <code>JTable</code>.
     */
    public int getFila() {
        return fila;
    }

    /**
     * Establece el Número de la fila en un <code>JTable</code>.
     * @param fila Número de la fila en un <code>JTable</code>.
     */
    public void setFila(int fila) {
        try{
        this.fila = fila;
    }catch  (java.lang.Exception ex){}    
    }

    /**
     * Devuelve el Valor contenido en la celda.
     * @return Valor contenido en la celda.
     */
    public Object getObjValue() {
       try{ 
        try{
            if(this.strNombreFila.equals("gridx")){
                this.objComponente.getObjGridBagConstraints().gridx = Integer.parseInt(String.valueOf(objValue));
            }
            else if(this.strNombreFila.equals("gridy")){
                this.objComponente.getObjGridBagConstraints().gridy = Integer.parseInt(String.valueOf(objValue));
            }
            else if(this.strNombreFila.equals("gridheight")){
                this.objComponente.getObjGridBagConstraints().gridheight = Integer.parseInt(String.valueOf(objValue));
            }
            else if(this.strNombreFila.equals("gridwidth")){
                this.objComponente.getObjGridBagConstraints().gridwidth = Integer.parseInt(String.valueOf(objValue));
            }
            else if(this.strNombreFila.equals("weightx")){
                this.objComponente.getObjGridBagConstraints().weightx = Double.valueOf(String.valueOf(objValue));
            }
            else if(this.strNombreFila.equals("weighty")){
                this.objComponente.getObjGridBagConstraints().weighty = Double.valueOf(String.valueOf(objValue));
            }
            else if(this.strNombreFila.equals("ipadx")){
                this.objComponente.getObjGridBagConstraints().ipadx = Integer.parseInt(String.valueOf(objValue));
            }
            else if(this.strNombreFila.equals("ipady")){
                this.objComponente.getObjGridBagConstraints().ipady = Integer.parseInt(String.valueOf(objValue));
            }
            else if(this.strNombreFila.equals("anchor")){
                this.objComponente.getObjGridBagConstraints().anchor = Integer.parseInt(String.valueOf(objValue));
            }
            else if(this.strNombreFila.equals("fill")){
                this.objComponente.getObjGridBagConstraints().fill = Integer.parseInt(String.valueOf(objValue));
            }
            else if(this.strNombreFila.equals("insets.top")){
                this.objComponente.getObjGridBagConstraints().insets.top = Integer.parseInt(String.valueOf(objValue));
            }
            else if(this.strNombreFila.equals("insets.left")){
                this.objComponente.getObjGridBagConstraints().insets.left = Integer.parseInt(String.valueOf(objValue));
            }
            else if(this.strNombreFila.equals("insets.bottom")){
                this.objComponente.getObjGridBagConstraints().insets.bottom = Integer.parseInt(String.valueOf(objValue));
            }
            else if(this.strNombreFila.equals("insets.right")){
                this.objComponente.getObjGridBagConstraints().insets.right = Integer.parseInt(String.valueOf(objValue));
            }
        }catch(NumberFormatException  ex){
            Utileria.mostrarMensaje(Utileria.objFrame, 
                    "Formato ó Valor No Permitido para la Propiedad " + strNombreFila, "", JOptionPane.WARNING_MESSAGE);
        }
        return objValue;
    }catch(java.lang.NullPointerException ex){}
       return null;
    }

    /**
     * Establece el Valor contenido en la celda.
     * @param objValue Valor contenido en la celda.
     */
    public void setObjValue(Object objValue) {
        this.objValue = objValue;
    }

    /**
     * Devuelve el Nombre de la Fila en un <code>JTable</code>.
     * @return Nombre de la Fila en un <code>JTable</code>.
     */
    public String getStrNombreFila() {
        return strNombreFila;
    }

    /**
     * Establece el Nombre de la Fila en un <code>JTable</code>.
     * @param strNombreFila Nombre de la Fila en un <code>JTable</code>.
     */
    public void setStrNombreFila(String strNombreFila) {
        this.strNombreFila = strNombreFila;
    }

    @Override
    public String toString() {
        return String.valueOf(objValue);
    }
}
